package src.main.java.action;

import java.util.ArrayList;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;

import src.main.java.dao.PessoaDAO;
import src.main.java.entity.Ocorrencia;
import src.main.java.entity.Pessoa;

public class PessoaAction {
	private Pessoa pessoa;
	private PessoaDAO pessoaDAO;
	private ArrayList<Pessoa> pessoasList;
	private Long cpf;
	private String temOcorrencia;
	private String edit;
	private String feedback;
	Ocorrencia ocorrencia;

	@Action(value = "goToCadastroPessoa", results = {
			@Result(location = "cadastroPessoa.jsp", name = "success") }
	)
	public String goToCadastro(){
		return "success";
	}

	@Action(value = "savePessoa", results = {
			@Result(location = "pessoas.jsp", name = "success"),
			@Result(location = "cadastroPessoa.jsp", name = "fail")}
	)
	public String save(){
		boolean sucesso = true;
		feedback = "sucesso";
		
		if(pessoaDAO == null){
			pessoaDAO = new PessoaDAO();
		}
		if(pessoaDAO.getPessoaByCpf(pessoa.getCpf()) != null){
			if(edit!= null && "true".equals(edit)){
				Pessoa old = pessoaDAO.getPessoaByCpf(pessoa.getCpf());
				if(old.equals(pessoa)){
					feedback = "naoEditado";
					return "fail";
				}else{
					sucesso = pessoaDAO.editPessoa(pessoa);
				}
			} else {
				feedback = "cpfJaExistente";
				return "fail";
			}
		} else{
			sucesso = pessoaDAO.savePessoa(pessoa);
		}
		
		if (!sucesso){
			feedback = "BDError";
			return "fail";
		}else{
			if ("X".equals(pessoa.getScore())){
				feedback = "pessoaX";
				return "fail";
			} else {
				feedback = "sucesso";
			}
		}
		
		pessoa = null;
		return list();
	}

	@Action(value = "editPessoa", results = {
			@Result(location = "cadastroPessoa.jsp", name = "success") }
	)
	public String edit(){
		if(pessoaDAO == null){
			pessoaDAO = new PessoaDAO();
		}
		pessoa = pessoaDAO.getPessoaByCpf(cpf);
		feedback = "";
		return "success";
	}

	@Action(value = "removePessoa", results = {
			@Result(location = "pessoas.jsp", name = "success") }
	)
	public String remove(){
		boolean sucesso = true;
		feedback = "sucesso";
		
		if(pessoaDAO == null){
			pessoaDAO = new PessoaDAO();
		}
		pessoa = pessoaDAO.getPessoaByCpf(cpf);
		sucesso = pessoaDAO.removePessoa(pessoa);
		
		if (!sucesso){
			feedback = "BDError";
		} else {
			feedback = "sucesso";
		}

		pessoa = null;
		return list();
	}

	@Action(value = "listPessoa", results = {
			@Result(location = "pessoas.jsp", name = "success") }
	)
	public String list(){
		if(pessoaDAO == null){
			pessoaDAO = new PessoaDAO();
		}
		Boolean temOcorrenciaBoolean = null;
		if("nao".equals(temOcorrencia))
			temOcorrenciaBoolean = false;
		if("sim".equals(temOcorrencia))
			temOcorrenciaBoolean = true;

		pessoasList = pessoaDAO.listPessoa(pessoa, temOcorrenciaBoolean);
		
		if(pessoasList.size()==0){
			feedback = "listavazia";
		}
		
		return "success";
	}

	public ArrayList<Pessoa> getPessoasList() {
		return pessoasList;
	}

	public void setPessoasList(ArrayList<Pessoa> pessoasList) {
		this.pessoasList = pessoasList;
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public Long getCpf() {
		return cpf;
	}

	public void setCpf(Long cpf) {
		this.cpf = cpf;
	}

	public String getTemOcorrencia() {
		return temOcorrencia;
	}

	public void setTemOcorrencia(String temOcorrencia) {
		this.temOcorrencia = temOcorrencia;
	}

	public String getEdit() {
		return edit;
	}

	public void setEdit(String edit) {
		this.edit = edit;
	}

	public String getFeedback() {
		return feedback;
	}

	public void setFeedback(String feedback) {
		this.feedback = feedback;
	}
	
	public Ocorrencia getOcorrencia() {
		return ocorrencia;
	}

	public void setOcorrencia(Ocorrencia ocorrencia) {
		this.ocorrencia = ocorrencia;
	}

}
